home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cocktail / cg.lha / cg / m2c / Queue.c < prev    next >
C/C++ Source or Header  |  1992-11-24  |  2KB  |  122 lines

  1. #include "SYSTEM_.h"
  2.  
  3. #ifndef DEFINITION_DynArray
  4. #include "DynArray.h"
  5. #endif
  6.  
  7. #ifndef DEFINITION_Sets
  8. #include "Sets.h"
  9. #endif
  10.  
  11. #ifndef DEFINITION_Sets
  12. #include "Sets.h"
  13. #endif
  14.  
  15. #ifndef DEFINITION_Queue
  16. #include "Queue.h"
  17. #endif
  18.  
  19.  
  20. static LONGINT QueueSizeL;
  21. static struct S_1 {
  22.     SHORTCARD A[10000 + 1];
  23. } *QueuePtr;
  24. static SHORTCARD QueueSize, QueueCount, QueueIn, QueueOut;
  25. static Sets_tSet QueueSet;
  26.  
  27.  
  28. void Queue_MakeQueue
  29. # ifdef __STDC__
  30. (SHORTCARD Size)
  31. # else
  32. (Size)
  33. SHORTCARD Size;
  34. # endif
  35. {
  36.   QueueSizeL = Size;
  37.   DynArray_MakeArray((ADDRESS *)&QueuePtr, &QueueSizeL, (LONGINT)sizeof(SHORTCARD));
  38.   QueueSize = Size;
  39.   QueueCount = 0;
  40.   QueueIn = 0;
  41.   QueueOut = 0;
  42.   Sets_MakeSet(&QueueSet, (LONGCARD)QueueSize);
  43. }
  44.  
  45. void Queue_ReleaseQueue
  46. # ifdef __STDC__
  47. ()
  48. # else
  49. ()
  50. # endif
  51. {
  52.   DynArray_ReleaseArray((ADDRESS *)&QueuePtr, &QueueSizeL, (LONGINT)sizeof(SHORTCARD));
  53.   Sets_ReleaseSet(&QueueSet);
  54. }
  55.  
  56. BOOLEAN Queue_IsEmpty
  57. # ifdef __STDC__
  58. ()
  59. # else
  60. ()
  61. # endif
  62. {
  63.   return QueueCount == 0;
  64. }
  65.  
  66. void Queue_Enqueue
  67. # ifdef __STDC__
  68. (SHORTCARD Elmt)
  69. # else
  70. (Elmt)
  71. SHORTCARD Elmt;
  72. # endif
  73. {
  74.   if (!Sets_IsElement((LONGCARD)Elmt, &QueueSet)) {
  75.     QueuePtr->A[QueueIn] = Elmt;
  76.     QueueIn = (QueueIn + 1) % QueueSize;
  77.     INC(QueueCount);
  78.     Sets_Include(&QueueSet, (LONGCARD)Elmt);
  79.   }
  80. }
  81.  
  82. SHORTCARD Queue_Dequeue
  83. # ifdef __STDC__
  84. ()
  85. # else
  86. ()
  87. # endif
  88. {
  89.   SHORTCARD Result;
  90.  
  91.   Result = QueuePtr->A[QueueOut];
  92.   QueueOut = (QueueOut + 1) % QueueSize;
  93.   DEC(QueueCount);
  94.   Sets_Exclude(&QueueSet, (LONGCARD)Result);
  95.   return Result;
  96. }
  97.  
  98. BOOLEAN Queue_IsElement
  99. # ifdef __STDC__
  100. (SHORTCARD Elmt)
  101. # else
  102. (Elmt)
  103. SHORTCARD Elmt;
  104. # endif
  105. {
  106.   return Sets_IsElement((LONGCARD)Elmt, &QueueSet);
  107. }
  108.  
  109. void BEGIN_Queue()
  110. {
  111.   static BOOLEAN has_been_called = FALSE;
  112.  
  113.   if (!has_been_called) {
  114.     has_been_called = TRUE;
  115.  
  116.     BEGIN_DynArray();
  117.     BEGIN_Sets();
  118.     BEGIN_Sets();
  119.  
  120.   }
  121. }
  122.